package class_2;

import java.util.Scanner;

public class Coding_SwapExclusiveOr {
	public static void main(String[] args) {
		int[] arr = new int[2];
		arr[0] = 10;
		arr[1] = 20;
		System.out.printf("交换前: arr[0]=%d, arr[1]=%d\n", arr[0], arr[1]);
		swap(arr,0,1);
		System.out.printf("交换前: arr[0]=%d, arr[1]=%d\n", arr[0], arr[1]);
		
		//自身之间交换， 期望结果: 不变
		System.out.printf("交换前: arr[0]=%d\n", arr[0]);
		swap(arr,0,0);
		//结果必然为0.
		System.out.printf("交换后: arr[0]=%d\n", arr[0]);
	}
    public static void main1(String[] args) {
        Scanner scan = new Scanner(System.in);
        
        while (scan.hasNextInt()) {  // 检查是否还有下一个整数输入
            int a = scan.nextInt();  // 读取第一个整数
            if (scan.hasNextInt()) {  // 检查是否还有第二个整数输入
                int b = scan.nextInt();  // 读取第二个整数

                System.out.printf("交换前: a=%d, b=%d\n", a, b);
                // 通过异或操作交换 a 和 b
                a = a ^ b;
                b = a ^ b;
                a = a ^ b;
                System.out.printf("交换后: a=%d, b=%d\n", a, b);
            } else {
                System.out.println("需要一个配对数字。");
                break;  // 退出循环，因为没有第二个数字配对
            }
        }

        scan.close();  // 关闭扫描器资源
    }
    /**
     * if i == j,那么异或运算将失效。
     * @param arr
     * @param i
     * @param j
     */
    public static void swap(int[] arr, int i,int j) {
    	// 异或运算的两个数不能在同一内存块
    	// 因为运算会影响下一步运算。
    	arr[i] = arr[i] ^ arr[j];
    	arr[j] = arr[i] ^ arr[j];
    	arr[i] = arr[i] ^ arr[j];
    }
}
